iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0

大綱

  • 繼昨天和前天兩篇的實作,確認可以 畫出甘特圖把圖片插入投影片 後,就可以安心地開發新的模組

Chart 類別

  • 先前我們順藤摸瓜,拿回一堆東西後,包括 我的工作們
  • 現在則需要左顧右盼,看看如何把那些工作們,變成畫圖所需要的輸入
    • 從 [tasks] -> DataFrame
  • 於是我製作了下面一段程式碼
    1. 建構子:裝 一個 Pandas DataFrame (表格)一張圖
    2. 讀取(ㄌㄡ)資料的函式:給他工作串列、塞給表格
    3. 繪製圖表的函式:從表格內的資料,產生對應的圖表
    4. 另存新檔的函式:呼叫時,就可以根據給的希望檔案名稱,另存出圖檔
import plotly.express as px
import pandas as pd


class Chart():

    def __init__(self, df) -> None:
        self.dataframe = None
        self.fig = None

    def load_data(self, tasks):
        self.dataframe = pd.DataFrame(tasks)
        # self.dataframe = pd.DataFrame([
        #     dict(Task = "工作1", Start = '2023-09-13', End = '2023-10-25', Assigned = "Rita", Difficulty = 70),
        #     dict(Task = "工作5", Start = '2024-01-01', End = '2024-09-28', Assigned = "奴隸 C", Difficulty = 80)
        # ])

    def create_chart(self):
        self.fig = px.timeline(self.dataframe, x_start="Start", x_end="End", y="Task", color="Assigned")
        # Tasks from top to bottom
        self.fig.update_yaxes(autorange = "reversed") 
        # self.fig.show()

    def save_chart(self, filename):
        self.fig.write_image(filename)


如何使用上述功能?

  • main.py 呼叫前,還有一步之遙
  • 因為如果我們直接用 python 的終端,直接做出一個 kanban 實例,如下:
    from libs.kanban import Kanban
    
    kb = Kanban()
    
    kb.get_tasks_in_project_details(assignee_gid='<某某人的 user gid>')
    
    kb.my_tasks
    
  • 其結果如下:(是字典裡面包字典)
    {
        '1204403986973626': {'name': '無名氏'},
        '1204359005227901': {'gid': '1204359005227901', 'resource_type': None, 'name': '撰寫產品計畫書', 'resource_subtype': None, 'created_by': None, 'approval_status': None, 'assignee_status': None, 'completed': True, 'completed_at': datetime.datetime(2023, 5, 31, 1, 26, 13, 978000, tzinfo=tzutc()), 'completed_by': None, 'created_at': None, 'dependencies': None, 'dependents': None, 'due_at': None, 'due_on': datetime.date(2023, 5, 30), 'external': None, 'html_notes': None, 'hearted': None, 'hearts': None, 'is_rendered_as_separator': None, 'liked': None, 'likes': None, 'memberships': None, 'modified_at': None, 'notes': None, 'num_hearts': None, 'num_likes': None, 'num_subtasks': None, 'start_at': None, 'start_on': datetime.date(2023, 4, 11), 'actual_time_minutes': None, 'assignee': {'gid': '1203513697511442', 'resource_type': None, 'name': 'Rita'}, 'assignee_section': None, 'custom_fields': None, 'followers': None, 'parent': None, 'projects': None, 'tags': None, 'workspace': None, 'permalink_url': None},
        '1204403986973640': <基於商業機密,以下省略>
    }
    
  • 因為我呼叫的 Asana Api 在權衡查詢速度和傳輸成本,沒有把所有的東西都挖出來
  • 有些欄位對應的數值會是空白的
  • 所以先前實作了清除空白欄位的小函式
    kb.clean_empty_values_in_my_tasks()
    
  • 清理結果如下:
    {
        '1204403986973626': {'name': '無名氏'},
        '1204359005227901': {'gid': '1204359005227901', 'name': '撰寫產品計畫書', 'completed': True, 'completed_at': datetime.datetime(2023, 5, 31, 1, 26, 13, 978000, tzinfo=tzutc()), 'due_on': datetime.date(2023, 5, 30), 'start_on': datetime.date(2023, 4, 11), 'assignee': {'gid': '1203513697511442', 'resource_type': None, 'name': 'Rita'}}, 
        '1204403986973640': <基於商業機密,以下省略>
    }
    

待完成項目

  • 如果可以,把上述格式的字典包字典,替換成串列包字典
  • 新包出的字典,所附帶的 Key 是要配合 Chart 中的 ㄌㄡ 資料函式使用的
  • 原始碼更新:https://github.com/rita0124/slide-generator/commit/1fd690a553b1ce50af152d004474e4b1b152f090

上一篇
Day 16 - 理解 Python-pptx 的 Placeholder 類型並加入甘特圖
下一篇
Day 18 - 製圖模組的實作,從 Asana Task 繪製成甘特圖(中)
系列文
挽救肝指數 x 職場生存術 x 老闆愛看的投影片製造機30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言